package com.are.servelet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.are.manejadores.ManejadorCategoria;
import com.are.manejadores.ManejadorPerfiles;
import com.are.odisea.Categoria;
import com.are.odisea.Perfiles;
import com.are.odisea.db;

/**
 * Servlet implementation class SrvCategorias
 */
@WebServlet("/SrvCategorias")
public class SrvCategorias extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SrvCategorias() {
        super();
        // TODO Auto-generated constructor stub
    }
    protected void ProcesarPeticion(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
    	response.setContentType("text/html;charset=ISO-8859-1");
    	PrintWriter out = response.getWriter();
    	
    	db conexion = null;
    	String operacion = (String)request.getParameter("operacion");
    	
    	try {
    		if (operacion.equals("add")) {
    			conexion = new db();
    			String descripcion = (String)request.getParameter("descripcion");
    			String padreid = (String)request.getParameter("parent");
    			String nivel = (String)request.getParameter("nivel");
    			
    			Categoria categoria = new Categoria();
    			categoria.setDescripcion(descripcion);
    			categoria.setParent(Integer.parseInt(padreid));
    			categoria.setNivel(Integer.parseInt(nivel));
    			
    			ManejadorCategoria mc = new ManejadorCategoria(conexion);
    			if (mc.add(categoria)) {
    				out.print("OK");
    			}else {
    				throw new SQLException("Error al procesar la solicitud");
    			}
    			
    			
    		}

    		if (operacion.equals("update")) {
    			conexion = new db();
    			String id = (String)request.getParameter("id");
    			String descripcion = (String)request.getParameter("descripcion");
    			String padreid = (String)request.getParameter("parent");
    			String nivel = (String)request.getParameter("nivel");
    			
    			Categoria categoria = new Categoria();
    			categoria.setId(Integer.parseInt(id));
    			categoria.setDescripcion(descripcion);
    			categoria.setParent(Integer.parseInt(padreid));
    			categoria.setNivel(Integer.parseInt(nivel));
    			
    			ManejadorCategoria mc = new ManejadorCategoria(conexion);
    			if (mc.update(categoria)) {
    				out.print("OK");
    			}else {
    				throw new SQLException("Error al procesar la solicitud");
    			}
    			
    			
    		}

    		if (operacion.equals("remove")) {
    			conexion = new db();
    			String id = (String)request.getParameter("id");
    			
    			
    			ManejadorCategoria mc = new ManejadorCategoria(conexion);
    			if (mc.remove(Integer.parseInt(id))) {
    				out.print("OK");
    			}else {
    				throw new SQLException("Error al procesar la solicitud");
    			}
    		}
    		
    		if (operacion.equals("list")) {
    			String nivel = (String)request.getParameter("nivel");
    			String parent = (String)request.getParameter("parent");
    			ArrayList<Categoria> lista = new ArrayList<Categoria>();
    			conexion = new db();
    			ManejadorCategoria mc = new ManejadorCategoria(conexion);
    			lista = mc.List(Integer.parseInt(nivel), Integer.parseInt(parent));
    			if (lista.size() > 0) {
        			out.println("<table>");
        			out.println("<tr>");
        			out.println("<th>Id</th>");
        			out.println("<th>Descripcion</th>");
        			out.println("<th></th>");
        			out.println("</tr>");

    				int fila = 1;
    				for (Categoria categoria: lista) {
    					out.println("<tr " + (fila%2==0?"class='odd'":"") + ">");
    					out.println("<td>" + categoria.getId() + "</td>");
    					out.println("<td>" + categoria.getDescripcion() + "</td>");
    					out.println("<td><a href=\"Categorias.jsp?nivel=" + nivel + "&parent=" + categoria.getId() + "\"><img src='../images/Folder.png' /></a></td>");
    					out.println("</tr>");
    					fila++;
    				}
    				out.println("</table>");
    			}else {
    				out.println("<strong>No hay categorias creadas</strong>");
    			}
    			
    			
    		}
    		
    	}catch (SQLException e) {
    		out.println("Error con el Servidor " + e.getMessage());
    	}catch (Exception e) {
        		out.println("Excepcion: " + e.getMessage());
    	}finally {
    		if (conexion != null) {
    			try {
					conexion.Close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					out.println("Error al cerrar la conexion " + e.getMessage());
				}
    		}
    	}
    	
    	
    	
    	
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ProcesarPeticion(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		ProcesarPeticion(request,response);
	}

}
